Past Cornell ECE Masters of Engineering Independent Design Projects

ECE 6930, V. Hunter Adams (vha3@cornell.edu)

In [2]:
from scipy.io import wavfile
from IPython.display import Audio
import numpy
from scipy.fft import fft
from scipy.signal import welch
import matplotlib.pyplot as plt
from IPython.display import HTML
plt.rcParams["figure.figsize"] = (20,3)
%matplotlib inline
In [3]:
HTML('''<script>
code_show=true; 
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')
Out[3]:

The centerpiece of the Cornell M.Eng. program is the professional project, in which students apply theory to a real problem, with the guidance from faculty, and often in collaboration with other students. This page describes the projects of my past advisees that have graduated.



Spring, 2022

Distributed Environmental Sensing System for the Johnson Museum

Authors: Mingyang Feng and Yingjia Zhang
Abstract: This project is a collaboration with the Herbert F. Johnson Museum of Art on campus. Art museum staff must regularly gather temperature and humidity measurements from throughout the museum. These measurements inform maintenance schedules and display locations for sensitive artwork. Light exposure could also inform these schedules, but the museum does not presently measure it with the same regularity. To help museum staff gather measurements, we developed an IoT system which allows them to remotely monitor the real-time environmental conditions throughout the museum. In particular, the system measures temperature, humidity, ambient light, and ultraviolet light. Each node in the IoT system is composed of multiple deployable sensors controlled by a low-cost and low-power microcontroller named NodeMCU. The IoT system gather data from these sensors at a programmable rate. All data are aggregated in a remote database and displayed on a personal website for users to access via the internet. A one-month test has been performed in the museum to verify the system works as per the requirements.
Report: Download here

Chaotic Oscillator as Sound Synthesis Controller

Authors: Zifu Qin
Abstract: In some circumstances, human ears are better than eyes at recognizing patterns. Researchers have sonified complex datasets, including DNA sequences, to use their ears to find patterns hidden from their eyes. By sonifying the well-known chaotic system – “Lorenz System”, this project qualitatively investigates the ear's response to a sonified chaotic system. To sonify the Lorenz System, the team built a microcontroller-based chaotic synthesizer which could generate sounds with chaotic patterns. In this project, the source of chaos was from modulated Lorenz Attractors which were mapped to the output frequencies of a Direct Digital Synthesis sine-wave synthesizer. The RP2040 microcontroller was used to implement the algorithm and send the generated digital frequency signals to a digital to analog converter to make sounds. This project was an exploratory experiment of sonifying a chaotic system. We found that the sonified chaotic system sounded vaguely natural and organic.
Report: Download here

In [13]:
samplerate2, data2 = wavfile.read('./one.wav')
Audio(data2[:,0], rate=samplerate2)
Out[13]:

Designing a Camera Module Driver Using Programmable I/O On Pi Pico RP2040

Authors: Yibo Yang
Abstract: This project aims to implement a camera module driver using the Programmable I/O (PIO) on the RP2040 microcontroller from Raspberry Pi. The PIO coprocessors enable high-speed control of the RP2040's I/O ports without any CPU intervention. Furthermore, these coprocessors can communicate data to and from the CPU via Direct Memory Access (DMA) channels. This makes them ideal for implementing high-speed communication protocols with external sensors and devices, like cameras. This report describes the progress made toward that goal. In particular, it describes a Serial Peripheral Interface (SPI) interface to a digital-to-analog converter (DAC) implemented in PIO assembly and fed by DMA channels. This report also describes ongoing work, including integrating an SPI camera module into the system, streaming the input data to a VGA screen, and implementing some other more complex camera interface drivers.
Report: Download here


Fall, 2021

Lab Prototype Board for the Pi Pico RP2040

Authors: Andrew Tsai and Felipe Shiwa
Abstract: The RP2040 is a low-cost, feature-rich microcontroller recently developed and released by the Raspberry Pi Foundation. Due to its potential as a teaching tool and for student projects, it has been chosen for evaluation as a potential replacement for the PIC32, the current microcontroller used in ECE4760, Designing with Microcontrollers. In this report, we detail our efforts to familiarize ourselves with the Raspberry Pi Pico and subsequently design a prototype lab board that implements it. We then assess our board as a replacement for the current PIC32-based lab board used by ECE4760 by analyzing its programmability and ease of interfacing, some of its hardware and software limitations, and lastly integrability into the course curriculum. We conclude with results from our development efforts in both hardware and software as well as a discussion on the educational value that the Pico and RP2040 can provide for the course.
Report: Download here

Analysis and Resynthesis of the Cornell Chimes

Authors: Alex Koenigsberger
Abstract: A bell produces a complicated sound. Its power spectrum can include dozens of irregularly-spaced modes, each of which decays at a different rate. As a result, they are difficult to synthesize and model using software. Bell-like sounds can be created using FM synthesis, but creating a parameterizable model of realistic bell music requires more sophistication. This was the objective for this project. To do so, each of the bell’s modes was modeled by a decaying sinusoid, and each sinusoid was parameterized by its frequency, initial amplitude, and decay time. This method was validated against the bells of the Cornell Chimes and produced a synthesized bell sound realistic enough to fool Cornell students in a blind listening test.
Report: Download here

In [4]:
samplerate1, data1 = wavfile.read('./MEng_Chimes_F_cut.wav')
data1 = numpy.array([float(i[1]) for i in data1[0:500000]])
print("Real bell recording")
Audio(data1, rate=samplerate1)
Real bell recording
Out[4]:
In [5]:
samplerate, data = wavfile.read('./lowF_resynth_16_noise.wav')
print("Synthesized bell")
Audio(data, rate=samplerate)
Synthesized bell
Out[5]:

Programming the Pi Pico RP2040 I/O Processor

Authors: Parth Sarthi Sharma
Abstract: In early 2021, the Raspberry Pi foundation launched a new microcontroller-the RP2040, which is a dual core, ARM Cortex M0 with an innovative input/output processor that can be programmed to produce custom waveforms and serial protocols. The system is programmable in Python or C, but the I/O processor is programmed in a custom assembly language (not ARM assembler). Prof. Hunter Adams and Prof. Bruce Land are considering replacing the existing PIC32 microcontrollers with RP2040 for the course ECE-4760 starting Fall 2022. I used a combination of dual core processor, DMA, and programmable I/O to create many programs and applications like SPI using PIO system and even created a TFT display library running independently on a PIO state machine that will be used by students taking the course starting next year. I also worked on some interesting applications such as Conway’s game of life, Google Dino game, Fractals and so on. On top of that, I also tested the performance differences in single core vs dual core applications. Lastly, I tested out various programs on the VGA screen using the VGA library created by Prof. Hunter Adams.
Report: Download here

Lab Prototype Board for the RPi Pico 2040

Authors: Emily Wang
Abstract: Designed by Raspberry Pi, RP2040 is a dual-core, ARM Cortex-M0+ processor with powerful internal peripherals. The Raspberry Pi Pico is an affordable and versatile board built using RP2040 that breaks out all its peripheral pins so the chip can be easily programmed and interfaced. The ECE 4760 class is considering building a prototype PCB that will provide a socket for the RPi Pico and provide a digital-to- analog converter, an LCD, an IMU sensor, a port expander, a VGA connector, and headers for connection to student-built circuitry. The new prototype will provide students with a greater variety of hardware opportunities and a better programming experience than the previous prototype using PIC32. In this prototype, we took suggestions from the previous development board and produced a compact 2-layer PCB that carries the RPi Pico and its hardware peripherals. Some firmware changes will also be made to run the existing code on the new PCB.
Report: Download here


Spring, 2021

Remote I/O for an FPGA

Authors: Anthony Viego
Abstract: With the COVID-19 pandemic, education has changed greatly. A majority of students now learn remotely, unable to gather in a lab and physically interact with devices. This has resulted in limitations on the kinds of projects, labs, and learning opportunities that students have available to them. In order to grant more freedom to students, specifically those in ECE 5760, this project has been developed to allow them to make use of peripherals and devices remotely through a GUI. Combined with custom logic implemented on the FPGA, students are able to fully utilize peripherals in a manner similar to before. The logic and GUI have been designed with ease of use in mind, ensuring that students will only need a few minutes to integrate it into their future projects. While the pandemic is coming to an end, we hope this project will be used to augment in-person labs and projects in the coming semesters.
Report: Download here